import Vue from 'vue';
//import { login, checkLoginQrResult, LoginByPortalToken } from '@/api/user';
import { login, getPermissionListById } from '@/api/user';

const user = {
  state: {
    accessToken: '',
    userId: '',
    userName: '',
    deptCode: '',
    deptName: '',
    permissionList: [],
    auth: []
  },
  mutations: {
    SET_ACCESSTOKEN: (state, accessToken) => {
      state.accessToken = accessToken;
    },
    SET_USERNAME: (state, userName) => {
      state.userName = userName;
    },
    SET_USERID: (state, userId) => {
      state.userId = userId;
    },
    SET_DEPTCODE: (state, deptCode) => {
      state.deptCode = deptCode;
    },
    SET_DEPTNAME: (state, deptName) => {
      state.deptName = deptName
    },
    SET_PERMISSIONLIST: (state, permissionList) => {
      state.permissionList = permissionList
    },
    SET_AUTH: (state, auth) => {
      state.auth = auth
    },
  },
  actions: {
    Login ({ commit }, userInfo) {
      return new Promise((resolve, reject) => {
        console.log(commit);
        login(userInfo)
          .then(response => {
            console.log(response);
            const { flag, data, errMsg } = response;
            if (flag) {
              data.token = '123456789';
              const {
                userName,
                userId,
                deptCode,
                deptName,
                token } = data;
              //暂时不使用token
              commit('SET_ACCESSTOKEN', token);
              commit('SET_USERNAME', userName);
              commit('SET_USERID', userId);
              commit('SET_DEPTCODE', deptCode);
              commit('SET_DEPTNAME', deptName);
              Vue.ss.set('ACCESSTOKEN', token);
              Vue.ss.set('USERNAME', userName);
              Vue.ss.set('USERID', userId);
              Vue.ss.set('DEPTNAME', deptName);
              Vue.ss.set('DEPTCODE', deptCode);

            } else {
              reject(errMsg);
            }
            resolve();
          })
          .catch(error => {
            reject(error);
          });
      });
    },

    GetPermissionList ({ commit }) {
      return new Promise((resolve, reject) => {
        const params = {}
        params.userId = Vue.ls.get('USERID');
        getPermissionListById(params)
          .then((response) => {
            console.log('GetPermissionList', response)
            const menuData = response.data.menu
            const authData = response.data.auth
            Vue.ls.set('AUTH', authData);
            if (menuData && menuData.length > 0) {
              menuData.forEach((item,) => {
                if (item['children']) {
                  item['redirect'] = null
                  const hasChildrenMenu = item['children'].filter((i) => {
                    return !i.hidden || i.hidden === false
                  })
                  if (hasChildrenMenu === null || hasChildrenMenu.length === 0) {
                    item['hidden'] = true
                  }
                }
              })
              commit('SET_PERMISSIONLIST', menuData)
            } else {
              // reject('getPermissionList: permissions must be a non-null array !')
            }
            resolve(response)
          })
          .catch((error) => {
            reject(error)
          })
      })
    },

    //   portalTokenLogin ({ commit }, portalToken) {
    //     return new Promise((resolve, reject) => {
    //       console.log(portalToken);
    //       LoginByPortalToken({ portalToken })
    //         .then(response => {
    //           console.log(response);
    //           const { flag, data, errMsg } = response;
    //           if (flag) {
    //             data.token = '123456789';
    //             const {
    //               personUnicode,
    //               specRight,
    //               userName,
    //               workId,
    //               funclist,
    //               opDwCode,
    //               deptName,
    //               dwName,
    //               dwCode,
    //               bzName,
    //               name,
    //               comName,
    //               inMesh,
    //               inSc,
    //               meshOpDWCode,
    //               meshLevel,
    //               userId,
    //               token } = data;
    //             let nfunclist = [{ funcId: "home", inEdit: "R" }, ...funclist];
    //             commit('SET_USERID', userId);
    //             //暂时不使用token
    //             commit('SET_TOKEN', token);
    //             commit('SET_USERNAME', userName);
    //             commit('SET_SPECRIGHT', specRight);
    //             commit('SET_PERSONUNICODE', personUnicode);
    //             commit('SET_WORKID', workId);
    //             commit('SET_FUNCLIST', nfunclist);
    //             commit('SET_OPDWCODE', opDwCode);
    //             commit('SET_DEPTNAME', deptName);
    //             commit('SET_DWNAME', dwName);
    //             commit('SET_DWCODE', dwCode);
    //             commit('SET_BZNAME', bzName);
    //             commit('SET_NAME', name);
    //             commit('SET_COMNAME', comName);
    //             commit('SET_INMESH', inMesh);
    //             commit('SET_INSC', inSc);
    //             commit('SET_MESHOPDWCODE', meshOpDWCode);
    //             commit('SET_MESHLEVEL', meshLevel);
    //             commit('SET_SCANFLAG', '1');
    //             Vue.ss.set('TOKEN', token);
    //             Vue.ss.set('USERID', userId);
    //             Vue.ss.set('USERNAME', userName);
    //             Vue.ss.set('SPECRIGHT', specRight);
    //             Vue.ss.set('PERSONUNICODE', personUnicode);
    //             Vue.ss.set('WORKID', workId);
    //             Vue.ss.set('FUNCLIST', nfunclist);
    //             Vue.ss.set('OPDWCODE', opDwCode);
    //             Vue.ss.set('DEPTNAME', deptName);
    //             Vue.ss.set('DWNAME', dwName);
    //             Vue.ss.set('DWCODE', dwCode);
    //             Vue.ss.set('BZNAME', bzName);
    //             Vue.ss.set('NAME', name);
    //             Vue.ss.set('COMNAME', comName);
    //             Vue.ss.set('INMESH', inMesh);
    //             Vue.ss.set('INSC', inSc);
    //             Vue.ss.set('MESHOPDWCODE', meshOpDWCode);
    //             Vue.ss.set('MESHLEVEL', meshLevel);
    //             Vue.ss.set('SCANFLAG', '1');

    //           } else {
    //             reject(errMsg);
    //           }
    //           resolve();
    //         })
    //         .catch(error => {
    //           reject(error);
    //         });
    //     });
    //   },
    //   //注销
    Logout ({ commit }) {
      return new Promise(resolve => {
        commit('SET_ACCESSTOKEN', '');
        commit('SET_USERNAME', '');
        commit('SET_USERID', '');
        commit('SET_DEPTCODE', '');
        commit('SET_DEPTNAME', '');
        Vue.ss.set('ACCESSTOKEN', '');
        Vue.ss.set('USERNAME', '');
        Vue.ss.set('USERID', '');
        Vue.ss.set('DEPTNAME', '');
        Vue.ss.set('DEPTCODE', '');
        //resolve();
        // logout()
        //   .then(() => {
        //     resolve();
        //   })
        //   .catch(() => {
        //     resolve();
        //   });
        resolve();
      });
    },
    // 更新token
    renewToken ({ commit }, token) {
      return new Promise(resolve => {
        console.log('RenewToken:' + token);
        commit('SET_ACCESSTOKEN', token);
        Vue.ss.set('ACCESSTOKEN', token);
        resolve();
      });
    },
    //根据vue-ls更新本地文件
    refreshUser ({ commit }) {
      return new Promise(resolve => {
        console.log('刷新重新初始化Vuex');
        const userId = Vue.ss.get('USERID') ? Vue.ss.get('USERID') : '';
        const token = Vue.ss.get('TOKEN') ? Vue.ss.get('TOKEN') : '';
        const userName = Vue.ss.get('USERNAME') ? Vue.ss.get('USERNAME') : '';
        //const workId = Vue.ss.get('WORKID') ? Vue.ss.get('WORKID') : '';         
        const deptCode = Vue.ss.get('DEPTCODE') ? Vue.ss.get('DEPTCODE') : '';
        const deptName = Vue.ss.get('DEPTNAME') ? Vue.ss.get('DEPTNAME') : '';
        const permissionList = Vue.ss.get('PERMISSIONLIST') ? Vue.ss.get('PERMISSIONLIST') : [];

        commit('SET_ACCESSTOKEN', token);
        commit('SET_USERNAME', userName);
        commit('SET_USERID', userId);
        commit('SET_DEPTCODE', deptCode);
        commit('SET_DEPTNAME', deptName);
        commit('SET_PERMISSIONLIST', permissionList);

        resolve();
      });
    },
    //   qrLogin ({ commit }, qrCode) {
    //     return new Promise((resolve, reject) => {
    //       console.log(qrCode);
    //       checkLoginQrResult(qrCode)
    //         .then(response => {
    //           console.log(response);
    //           const { flag, data, errMsg } = response;
    //           let token = '123456789';
    //           if (flag) {
    //             const {
    //               userId,
    //               personUnicode,
    //               specRight,
    //               userName,
    //               workId,
    //               funclist,
    //               opDwCode,
    //               deptName,
    //               dwName,
    //               dwCode,
    //               bzName,
    //               name,
    //               comName,
    //               inMesh,
    //               inSc,
    //               meshOpDWCode,
    //               meshLevel,
    //               scanFlag } = data;
    //             if (scanFlag === '1') {
    //               let nfunclist = [{ funcId: "home", inEdit: "R" }, ...funclist];
    //               commit('SET_USERID', userId);
    //               //暂时不使用token
    //               commit('SET_TOKEN', token);
    //               commit('SET_USERNAME', userName);
    //               commit('SET_SPECRIGHT', specRight);
    //               commit('SET_PERSONUNICODE', personUnicode);
    //               commit('SET_WORKID', workId);
    //               commit('SET_FUNCLIST', nfunclist);
    //               commit('SET_OPDWCODE', opDwCode);
    //               commit('SET_DEPTNAME', deptName);
    //               commit('SET_DWNAME', dwName);
    //               commit('SET_DWCODE', dwCode);
    //               commit('SET_BZNAME', bzName);
    //               commit('SET_NAME', name);
    //               commit('SET_COMNAME', comName);
    //               commit('SET_INMESH', inMesh);
    //               commit('SET_INSC', inSc);
    //               commit('SET_MESHOPDWCODE', meshOpDWCode);
    //               commit('SET_MESHLEVEL', meshLevel);
    //               commit('SET_SCANFLAG', scanFlag);
    //               Vue.ss.set('SCANFLAG', scanFlag);
    //               Vue.ss.set('TOKEN', token);
    //               Vue.ss.set('USERID', userId);
    //               Vue.ss.set('USERNAME', userName);
    //               Vue.ss.set('SPECRIGHT', specRight);
    //               Vue.ss.set('PERSONUNICODE', personUnicode);
    //               Vue.ss.set('WORKID', workId);
    //               Vue.ss.set('FUNCLIST', nfunclist);
    //               Vue.ss.set('OPDWCODE', opDwCode);
    //               Vue.ss.set('DEPTNAME', deptName);
    //               Vue.ss.set('DWNAME', dwName);
    //               Vue.ss.set('DWCODE', dwCode);
    //               Vue.ss.set('BZNAME', bzName);
    //               Vue.ss.set('NAME', name);
    //               Vue.ss.set('COMNAME', comName);
    //               Vue.ss.set('INMESH', inMesh);
    //               Vue.ss.set('INSC', inSc);
    //               Vue.ss.set('MESHOPDWCODE', meshOpDWCode);
    //               Vue.ss.set('MESHLEVEL', meshLevel);
    //             } else {
    //               commit('SET_SCANFLAG', scanFlag);
    //               Vue.ss.set('SCANFLAG', scanFlag);
    //             }

    //           } else {
    //             reject(errMsg);
    //           }
    //           resolve();
    //         })
    //         .catch(error => {
    //           reject(error);
    //         });
    //     });
    //   },
  }
};
export default user;
